/**
 * 
 */
package fr.univ_tln.inf9.exaplanning.controleur.utilisateur;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;

import fr.univ_tln.inf9.exaplanning.api.db.SessionManager;
import fr.univ_tln.inf9.exaplanning.api.utilisateur.Student;
import fr.univ_tln.inf9.exaplanning.api.utilisateur.Teacher;
import fr.univ_tln.inf9.exaplanning.api.utilisateur.User;
import fr.univ_tln.inf9.exaplanning.gui.utilisateur.JFrameCreateStudent;
import fr.univ_tln.inf9.exaplanning.gui.utilisateur.JFrameCreateTeacher;





/**
 * @author pivi
 *
 */
public class UserController {

	/**
	 * Ici les déclarations des frames de la gui
	 */
	
	public UserView userView = null;
	//public UserCreateView userCreateView = null;
	private User user = null;
	private JFrameCreateStudent jf;
	private JFrameCreateTeacher jf2;
	
	
	/**
	 * Le controleur à vide ne fait que créer la fenêtre popup, mais en fait
	 * il faudrait créer les deux vues. (dans l'autre constructeur aussi)
	 * Ensuite pour afficher la fenêtre il faut faire une méthode display (et close)
	 * pour chaque vue.
	 * Regarde à JFrameCreateUser maintenant
	 */
	public UserController () throws IOException, SQLException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, NoSuchFieldException {
		
		jf = new JFrameCreateStudent(this);
		jf2 = new JFrameCreateTeacher(this);
	}
	
	public UserController (User user){
		this.user = user;
		
		addListenersToName();
		addListenersToFirstName();
	}

	private void addListenersToFirstName() {
		user.addFirstNameListener(userView);
		
	}

	private void addListenersToName() {
		user.addNameListener(userView);
	}
	
	/**
	 * On crée un étudiant
	 * note: evidemment on sauvegarde pas la session à chaque fois
	 * @param mail
	 * @param fn
	 * @param ln
	 * @throws IOException
	 * @throws SQLException
	 * @throws SecurityException
	 * @throws IllegalArgumentException
	 * @throws NoSuchMethodException
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchFieldException
	 */
	public void createStudent(String mail, String fn, String ln) throws IOException, SQLException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, NoSuchFieldException {
		user = new Student(ln, fn, mail);
		SessionManager.getInstance().saveSession();
	}
	
	/**
	 * On crée un professeur
	 * note: evidemment on sauvegarde pas la session à chaque fois
	 * @param mail
	 * @param fn
	 * @param ln
	 * @throws IOException
	 * @throws SQLException
	 * @throws SecurityException
	 * @throws IllegalArgumentException
	 * @throws NoSuchMethodException
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchFieldException
	 */
	public void createTeacher(String mail, String fn, String ln) throws IOException, SQLException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, NoSuchFieldException {
		user = new Teacher(ln, fn, mail);
		SessionManager.getInstance().saveSession();
	}
	
	public void displayNewStudent() {
		jf.display();
	}
	
	public void displayNewTeacher() {
		jf2.display();
	}
	
	public void displayViews(){
		userView.display();
	}
	
	public void closeViews(){
		userView.close();
	}
	
	public void notifyNameChanged(String name){
		user.setName(name);
	}
	
	public void notifyFirstNameChanged(String first_name){
		user.setFirst_name(first_name);
	}
}
